package swimv2.ejb.control;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import swimv2.ejb.entity.Notifica;
import swimv2.ejb.entity.Notifica.TipoDiNotifica;
import swimv2.ejb.entity.Utente;
import swimv2.ejb.remote.GestioneAmiciRemote;
import swimv2.ejb.util.GestioneUtenti;


@Stateless(name="GestioneAmici") 
public class GestioneAmici implements GestioneAmiciRemote  {
	@PersistenceContext(unitName="SWIMV2")
	private EntityManager entityManager;
	
	public GestioneAmici()
	{
		
	
	}
	
	@Override
	
	//username e' quello che ha ricevuto l'amicizia
	//usernameAmico l'ha richiesta
	public void confermaAmico(String username, String usernameAmico)
	{
		Utente utente = GestioneUtenti.cercaUtente(entityManager, username);
		Utente amico = GestioneUtenti.cercaUtente(entityManager, usernameAmico);
		utente.getAmici().add(amico);
		amico.getAmici().add(utente);
		amico.getRichiesteAmiciziaEffettuate().remove(utente);
		
		Notifica notifica = new Notifica(TipoDiNotifica.CONFERMARICHIESTA,"Ho accettato l'amicizia",utente);
		entityManager.persist(notifica);
		amico.getNotifiche().add(notifica);
		
	}
	
	@Override
	public void rifiutaAmico(String username, String usernameAmico)
	{
		Utente utente = GestioneUtenti.cercaUtente(entityManager, username);
		Utente amico = GestioneUtenti.cercaUtente(entityManager, usernameAmico);

		amico.getRichiesteAmiciziaEffettuate().remove(utente);
		
		Notifica notifica = new Notifica(TipoDiNotifica.CONFERMARICHIESTA,"Ho rifiutato l'amicizia",utente);
		entityManager.persist(notifica);
		amico.getNotifiche().add(notifica);
		
	}
	
	//username e' quello che ha ricevuto l'amicizia
	//usernameAmico l'ha richiesta
	@Override
	public void richiediAmico(String username, String usernameAmico)
	{
		Utente utente = GestioneUtenti.cercaUtente(entityManager, username);
		Utente amico = GestioneUtenti.cercaUtente(entityManager, usernameAmico);

		utente.getRichiesteAmiciziaEffettuate().add(amico);
		
		Notifica notifica = new Notifica(TipoDiNotifica.RICHIESTAAMICIZIA,"Ho richiesto l'amicizia",amico);
		entityManager.persist(notifica);
		utente.getNotifiche().add(notifica);
		
	}
	
	@Override
	public List<Utente> elencoAmici(String username)
	{
		Utente utente = GestioneUtenti.cercaUtente(entityManager, username);
		List<Utente> elenco = new ArrayList<Utente>(utente.getAmici());
		return elenco;

	}
	@Override
	public List<Utente> elencoRichiesteInviate(String username)
	{
		Utente utente = GestioneUtenti.cercaUtente(entityManager, username);
		List<Utente> elenco = new ArrayList<Utente>(utente.getRichiesteAmiciziaEffettuate());
		return elenco;
		
	}
	@Override
	public List<Utente> elencoRichiesteRicevute(String username)
	{
		Utente utente = GestioneUtenti.cercaUtente(entityManager, username);
		List<Utente> elenco = new ArrayList<Utente>(utente.getRichiesteAmiciziaRicevute());
		return elenco;
		
	}
	
	
	
}
